package com.ruoyi.vqms.service;

import com.ruoyi.vqms.domain.VQMSQueue;
import com.ruoyi.vqms.domain.VQMSQueueReservation;
import com.ruoyi.vqms.domain.dto.*;

import java.util.List;

/**
 * 排队 服务层
 */
public interface IVQMSQueueService {

    List<VQMSQueue> selectList(VQMSQueue vqmsQueue);

    int add(VQMSQueue vqmsQueue);

    /**
     * 确认预约生成排队信息
     * @param vqmsQueueReservation
     * @return
     */
    int wxAdd(VQMSQueueReservation vqmsQueueReservation);

    VQMSQueue getById(Long id);

    VQMSQueue getByReservationId(Long reservationId);

    int update(VQMSQueue vqmsQueue);

    int delete(Long[] ids);

    int warehouseDelete(Long[] ids);

    /**
     * 排队置顶
     * @param vqmsQueue
     * @return
     */
    void topping(VQMSQueue vqmsQueue);

    /**
     * 排队置顶(仓管)
     * @param vqmsQueue
     * @return
     */
    void warehouseTopping(VQMSQueue vqmsQueue);

    /**
     * 设置加急置顶(仓管)
     * @param vqmsQueue
     * @return
     */
    void expeditedTopping(VQMSQueue vqmsQueue);

    /**
     * 排队下一个
     * @param vqmsQueue
     */
    void next(VQMSQueue vqmsQueue);

    /**
     * 排队中的完成装卸货
     */
    void queueNext(VQMSQueue vqmsQueue);

    /**
     * 排队更换队列
     * @param vqmsQueue
     */
    void change(VQMSQueue vqmsQueue);
    /**
     * 排队跳过
     * @param vqmsQueue
     */
    void skip(VQMSQueue vqmsQueue);

    /**
     * 查询昨日所有的排队中的车辆
     * @return
     */
    List<VQMSQueue> selectYesterdayWaitingQueue();

    /**
     * 按排队顺序查询排队车辆
     * @return
     */
    List<VQMSQueue> getQueueList(Long areaId);
    /**
     * 仓管员查询当日排队信息
     * @param vqmsQueue
     * @return
     */
    List<VQMSQueue> warehouseSelectList(VQMSQueue vqmsQueue,List<String> locationList);
    /**
     * 查询司机是否有未完成排队
     * @param driverPhone
     * @return
     */
    List<VQMSQueue> selectQueue(String driverPhone);
    /**
     * 查询当日排队信息（状态为装卸货中或者排队中）
     * @param vqmsQueue
     * @return
     */
    List<VQMSQueue> selectQueueList(VQMSQueue vqmsQueue);

    /**
     * 查询所有未完成的排队
     * @return
     */
    List<VQMSQueue> selectTimeoutList();

    /**
     * 根据队列ID查询所有未完成的排队
     * @return
     */
    List<VQMSQueue> selectAreaTimeoutList(Long areaId);

    /**
     * 查询当日未完成的排队(数据大屏)
     * @return
     */
    List<ToDayQueueVO> selectToDayList();

    /**
     * 统计今日排队信息
     * @return
     */
    ToDayQueueSummaryVO statisticsToDayQueue();

    /**
     * 统计排队车牌省市比例
     * @return
     */
    List<CityProportionVO> selectCity();

    /**
     * 统计近7日仓库排队时间段峰值
     * @return
     */
    List<QueueTimePeakValueVO> selectQueuePeak();

    /**
     * 统计近7日排队队列总数
     * @return
     */
    List<AreaQueueVO> selectAreaCount();

}
